package com.tistory.commons.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileUploadUtil {
	private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");

	/**
	 * 파일을 업로드한다.
	 * @param file 업로드하려는 File 객체
     * @param uploadPath 업로드 경로
	 * @param originFileName 원본 파일명
	 * @return
	 * @throws Exception
	 */
	public static String uploadFile(File file, String uploadPath, String originFileName) throws Exception {
       	return uploadFile(file, uploadPath, null, originFileName);
	}
	
	
	/**
	 * 파일을 업로드한다. (업로드 파일명을 포함되는 업로드 시간을 입력받아 처리한다.)
	 * @param file 업로드하려는 File 객체
	 * @param uploadPath 업로드 경로
	 * @param uploadDate 업로드 시간
	 * @param originFileName 원본 파일명
	 * @return
	 * @throws Exception
	 */
	public static String uploadFile(File file, String uploadPath, String uploadDate, String originFileName) throws Exception {
        
	    String uploadedFileName = "";
	    
	    if(uploadDate != null)
	        uploadedFileName = new StringBuffer(uploadDate).append("_").append(originFileName).toString();
	    else
	        uploadedFileName = new StringBuffer(sdf.format(new Date())).append("_").append(originFileName).toString();
        
        File dir = new File(uploadPath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        
        String uploadFileFullPath = uploadPath + File.separator + uploadedFileName;
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        try {

            inputStream = new FileInputStream(file);
            outputStream = new FileOutputStream(uploadFileFullPath);
            int bytesRead = 0;
            byte [] buffer = new byte[8192];
            while( (bytesRead = inputStream.read(buffer, 0, 8192)) != -1){
                outputStream.write(buffer, 0, bytesRead);
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(outputStream != null ) try{ outputStream.close(); }catch(Exception ee){}
            if(inputStream != null ) try{ inputStream.close(); }catch(Exception ee){}
        }
        
        return uploadFileFullPath;
    }
	
	
	/**
	 * 파일을 업로드한다.
	 * @param file 업로드 되는 파일 객체
	 * @param uploadPath 업로드 경로
	 * @param uploadedFileName 업로드되어 생성될 파일명
	 * @return
	 * @throws Exception
	 */
	public static String uploadFileNaming(File file, String uploadPath, String uploadedFileName) throws Exception {
              
        
        File dir = new File(uploadPath);
        if(!dir.exists()){
            dir.mkdirs();
        }
        
        String uploadFileFullPath = uploadPath + File.separator + uploadedFileName;
        FileInputStream inputStream = null;
        FileOutputStream outputStream = null;
        try {
            inputStream = new FileInputStream(file);
            outputStream = new FileOutputStream(uploadFileFullPath);
            
            int bytesRead = 0;
            byte [] buffer = new byte[8192];
            while( (bytesRead = inputStream.read(buffer, 0, 8192)) != -1){
                outputStream.write(buffer, 0, bytesRead);
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(outputStream != null ) try{ outputStream.close(); }catch(Exception ee){}
            if(inputStream != null ) try{ inputStream.close(); }catch(Exception ee){}
        }
        
        return uploadFileFullPath;
    }
	
//	// 테스트시 주석을 풀어 사용하세요.
//	 public static void main( String[] args ) throws Exception {
//	        
//	     File file = new File("C:\\test.txt");
//	     
//	     FileUploadUtil.uploadFile(file, "D:\\temp\\uploadTemp", "20091225", "test.txt");
//	 }


}
